package Futbol_Liga;
/**
 * Liga osoaren jardunaldi zerrenda da. Poltsa sortuko du jarduerak hasieratzean partidu guztien konbinazioak gordez. 
 * Datak kalkulatuko ditu suposatuz hilabeteak 28 egun dituela.
 * @author Txantxangorriak
 *
 */

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

public class JardunaldiZerrenda {
	private ZerrendaGen<Jardunaldia> jardunaldiak;
	/**
	 * metodo eraikitzailea
	 */
	public JardunaldiZerrenda() {
		jardunaldiak= new ZerrendaGen<Jardunaldia>();
		
	}
	/**
	 * Metodo honekin jardunaldiak hasieratu egiten dira, liga hasten denean: hau da, liga hasieratu botoia
	 * sakatzen denean interfazean
	 * @throws IOException
	 */
	public void jardunaldiakHasieratu() throws IOException {
		
		if(jardunaldiak!=null){			
		jardunaldiak.osagaiakEzabatu();//Jardunaldi guztiak ezabatzen ditu
		}
		
		ArrayList<Partidua> poltsa=this.poltsaSortu();
				
		//38 aste
		//Demagun hilabete bakoitzak 28 egun dituela
		int eguna=1;
		int hilabetea=1;
		for (int m=1;m<39;m++){
	
		String pData=eguna+"/"+hilabetea;
		Jardunaldia jard=new Jardunaldia(pData);
		jard.partiduakGehitu(poltsa);
		jardunaldiak.osagaiaGehitu(jard);
		if(eguna>28){
			eguna=1;
			hilabetea++;
		}
		else{
			eguna=eguna+7;
		}
		}
	}
	
	/**
	 * Jokatu egingo duten partiduen multzoa sortu egiten du, zerrenda osoa bueltatuz
	 * @return ArrayList<Partidua>
	 * @throws IOException
	 */
	private ArrayList<Partidua> poltsaSortu() throws IOException {
		
		ArrayList<Partidua> poltsa=new ArrayList<Partidua>();
		Partidua part=null;
		TaldeZerrenda td= TaldeZerrenda.getTaldeZerrenda();
	
		int i=0;
		while(i<19){
			
			for(int j=i+1; j<20;j++){
				part=new Partidua(td.lortuIndizea(i), td.lortuIndizea(j));
				poltsa.add(part);
				part=new Partidua(td.lortuIndizea(j), td.lortuIndizea(i));
				poltsa.add(part);
			
			}	
			i++;
			
		}
		return poltsa;
		
	}

	/**
	 * Zerrendako iteratzailea bueltatuko du
	 * @return Iterator<Jardunaldia>
	 */
	public Iterator<Jardunaldia> getIteratzailea(){
		return jardunaldiak.getIteratzailea();
	}
	/**
	 * Ligako pitxitxia lortuko du eta jokalaria bueltatuko du
	 * @return Jokalaria
	 */
	public Jokalaria pitxitxia() {
	
		ArrayList<Jokalaria> jokalariak=new ArrayList<Jokalaria>();
		ArrayList<Integer> golak= new ArrayList<Integer>();
		Iterator<Jardunaldia> it=this.getIteratzailea();
		Jardunaldia jar;
		Jokalaria jokMax=null;
		while(it.hasNext()){
			jar=it.next();
			jar.lortuJokalarienGolak(jokalariak, golak);
			
		}
		
		jokMax=lortuPitxitxia(jokalariak,golak);
		
		return jokMax;
	}
	/**
	 * Pitxitxia lortu egingo du
	 * @param jokalariak
	 * @param golak
	 * @return Jokalaria
	 */
	private Jokalaria lortuPitxitxia(ArrayList<Jokalaria> jokalariak, ArrayList<Integer> golak) {
		
		Jokalaria jok=null;
		int golMax=0;
		for(int i=0;i<golak.size();i++){
			
			if(golak.get(i)>=golMax){
				golMax=golak.get(i);
				jok=jokalariak.get(i);
			}
		}

		return jok;
	}
	/**
	 * Data konkretu bateko jardunaldia zein den bueltatuko du
	 * @param pJarData
	 * @return Jardunaldia
	 */
	public Jardunaldia lortuJardunaldia(String pJarData) {
		Iterator<Jardunaldia> it= this.getIteratzailea();
		Jardunaldia jar=null;
		boolean topatua=false;
		while(it.hasNext() && topatua==true){
			jar=it.next();
			if(pJarData.equals(jar.getData())){
				topatua=true;
			}
			
		}
		
		return jar;
	}
	/**
	 * Metodo honekin liga hasieratu egiten da
	 */
	public void simulazioaEgin() {
		
		Iterator<Jardunaldia> it= this.getIteratzailea();
		Jardunaldia jar=null;
		while(it.hasNext() ){
			jar=it.next();
			jar.simulazioaEgin();
	
	}
	}
	/**
	 * Zerrendaren elementu kopurua bueltatuko du
	 * @return int
	 */
	public int size() {
		
		return jardunaldiak.getOsagaiKop();
	}
	/**
	 * Data bat emanda jardunaldi horretako kiniela bueltatzen du
	 * @param pData
	 * @return String
	 */
	public String kiniela(String pData) {
		
		Iterator<Jardunaldia> it= this.getIteratzailea();
		Jardunaldia jar=null;
		boolean topatua=false;
		while(it.hasNext() && topatua==false ){
			jar=it.next();
			if(jar.getData().equals(pData)){
				topatua=true;
			}
	}
		String kiniela=jar.kinielaInprimatu();
		return kiniela;
	}
	
	
}
